Модель-Представление-Контроллер (MVC)
======================================

Yii использует шаблон проектирования Модель-Представление-Контроллер (MVC, Model-View-Controller),
который широко применяется в веб-программировании.

MVC предназначен для разделения бизнес-логики и пользовательского интерфейса, чтобы разработчики могли легко изменять
отдельные части приложения, не затрагивая другие.
В архитектуре MVC модель предоставляет данные и правила бизнес-логики, представление отвечает за пользовательский
интерфейс (например, текст, поля ввода), а контроллер обеспечивает взаимодействие между моделью и представлением.

Помимо этого, Yii использует фронт-контроллер, называемый приложением (application),
который инкапсулирует контекст обработки запроса. Приложение собирает информацию
о запросе и передает её для дальнейшей обработки соответствующему контроллеру.

Следующая диаграмма отображает структуру приложения Yii:

![Статическая структура приложения Yii](structure.png)


Типичная последовательность работы приложения Yii
-------------------------------------------------

Следующая диаграмма описывает типичную последовательность процесса обработки пользовательского запроса приложением:

![Типичная последовательность работы приложения Yii](flow.png)

   1. Пользователь осуществляет запрос посредством URL `http://www.example.com/index.php?r=post/show&id=1`,
и веб-сервер обрабатывает его, запуская скрипт инициализации `index.php`.
   2. Скрипт инициализации создает экземпляр [приложения](/doc/guide/basics.application) и запускает его на выполнение.
   3. Приложение получает подробную информацию о запросе пользователя от [компонента приложения](/doc/guide/basics.application#application-component) `request`.
   4. Приложение определяет запрошенные [контроллер](/doc/guide/basics.controller)
и  [действие](/doc/guide/basics.controller#action) при помощи компонента `urlManager`.
В данном примере контроллером будет `post`, относящийся к классу `PostController`, а действием — `show`, суть которого
определяется контроллером.
   5. Приложение создаёт экземпляр запрашиваемого контроллера для дальнейшей обработки запроса пользователя. Контроллер определяет
соответствие действия `show` методу `actionShow` в классе контроллера.  Далее создаются и применяются фильтры
(например, access control, benchmarking), связанные с данным действием, и, если фильтры позволяют, действие выполняется.
   6. Действие считывает из базы данных [модель](/doc/guide/basics.model) `Post` с ID равным `1`.
   7. Действие подключает [представление](/doc/guide/basics.view) `show`, передавая в него модель `Post`.
   8. Представление получает и отображает атрибуты модели `Post`.
   9. Представление подключает некоторые [виджеты](/doc/guide/basics.view#widget).
   10. Сформированное представление вставляется в [макет страницы](/doc/guide/basics.view#layout).
   11. Действие завершает формирование представления и выводит результат пользователю.